package com.wgh.product.util;

import com.wgh.product.entity.shop.Product;
import com.wgh.product.entity.shop.ProductAttribute;
import com.wgh.product.entity.shop.ProductSkuAttribute;
import com.wgh.product.entity.shop.Sku;
import com.wgh.search.entity.ProductDoc;
import com.wgh.search.entity.SkuDoc;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.math.BigDecimal;
import java.util.stream.Collectors;

/**
 * 商品实体转换工具类
 * 将Product实体转换为ProductDoc实体
 */
@Component
public class ProductDocConverter {

    /**
     * 将Product实体转换为ProductDoc实体
     * @param product 商品实体
     * @return 商品文档实体
     */
    public ProductDoc convertToProductDoc(Product product) {
        if (product == null) {
            return null;
        }

        ProductDoc productDoc = new ProductDoc();

        // 基本信息
        productDoc.setId(product.getId());
        productDoc.setName(product.getName());
        productDoc.setDescription(product.getDescription());
        productDoc.setPrice(product.getSalePrice().setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
        productDoc.setOriginalPrice(product.getMarketPrice().setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
        productDoc.setStock(product.getTotalStock());
        productDoc.setSales(product.getSaleCount());
        productDoc.setMainImage(product.getMainImage());
        productDoc.setStatus(product.getStatus());

        // 转换日期格式
        if (product.getCreateTime() != null) {
            productDoc.setCreateTime(Date.from(product.getCreateTime().atZone(java.time.ZoneId.systemDefault()).toInstant()));
        }
        if (product.getUpdateTime() != null) {
            productDoc.setUpdateTime(Date.from(product.getUpdateTime().atZone(java.time.ZoneId.systemDefault()).toInstant()));
        }

        // 分类和品牌信息
        if (product.getCategory() != null) {
            productDoc.setCategoryId(product.getCategory().getId());
            productDoc.setCategoryName(product.getCategory().getName());
        } else {
            productDoc.setCategoryId(product.getCategoryId());
        }

        if (product.getBrand() != null) {
            productDoc.setBrandId(product.getBrand().getId());
            productDoc.setBrandName(product.getBrand().getName());
        } else {
            productDoc.setBrandId(product.getBrandId());
        }

        // 处理SKU信息
        if (product.getSkus() != null && !product.getSkus().isEmpty()) {
            List<SkuDoc> skuDocs = convertToSkuDocs(product.getSkus());
            productDoc.setSkus(skuDocs);
        }

        // 处理商品属性
        if (product.getAttributes() != null && !product.getAttributes().isEmpty()) {
            Map<String, String> attributes = convertToAttributesMap(product.getAttributes());
            productDoc.setAttributes(attributes);
        }

        // 判断是否为热门商品或新品
        // TODO: 根据实际业务逻辑判断是否为热门商品或新品
        productDoc.setIsHot(false);
        productDoc.setIsNew(false);

        return productDoc;
    }

    /**
     * 将Sku列表转换为SkuDoc列表
     * @param skus SKU列表
     * @return SKU文档列表
     */
    private List<SkuDoc> convertToSkuDocs(List<Sku> skus) {
        if (skus == null || skus.isEmpty()) {
            return new ArrayList<>();
        }

        return skus.stream()
                .map(this::convertToSkuDoc)
                .filter(skuDoc -> skuDoc != null)
                .collect(Collectors.toList());
    }

    /**
     * 将Sku转换为SkuDoc
     * @param sku SKU实体
     * @return SKU文档
     */
    private SkuDoc convertToSkuDoc(Sku sku) {
        if (sku == null) {
            return null;
        }

        SkuDoc skuDoc = new SkuDoc();
        skuDoc.setId(sku.getId());
        skuDoc.setProductId(sku.getProductId());
        skuDoc.setPrice(sku.getSalePrice().setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
        skuDoc.setStock(sku.getStock());
        skuDoc.setSales(0); // TODO: 获取实际销量
        skuDoc.setImage(sku.getImage());
        skuDoc.setStatus(sku.getStatus());

        // 处理SKU属性
        if (sku.getSkuAttributes() != null && !sku.getSkuAttributes().isEmpty()) {
            Map<String, String> attributes = new HashMap<>();
            StringBuilder attributesText = new StringBuilder();

            for (ProductSkuAttribute skuAttribute : sku.getSkuAttributes()) {
                attributes.put(skuAttribute.getAttributeName(), skuAttribute.getAttributeValueName());
                if (attributesText.length() > 0) {
                    attributesText.append("; ");
                }
                attributesText.append(skuAttribute.getAttributeName()).append(":").append(skuAttribute.getAttributeValueName());
            }

            skuDoc.setAttributes(attributes);
            skuDoc.setAttributesText(attributesText.toString());
        }

        return skuDoc;
    }

    /**
     * 将商品属性列表转换为Map
     * @param attributes 商品属性列表
     * @return 属性Map
     */
    private Map<String, String> convertToAttributesMap(List<ProductAttribute> attributes) {
        if (attributes == null || attributes.isEmpty()) {
            return new HashMap<>();
        }

        Map<String, String> attributesMap = new HashMap<>();
        for (ProductAttribute attribute : attributes) {
            // TODO: 需要获取属性值
            attributesMap.put(attribute.getName(), "");
        }
        return attributesMap;
    }
}